package edu.upc.inmobile.repository.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import edu.upc.inmobile.domain.Articulo;
import edu.upc.inmobile.repository.ArticuloRepository;

@Repository
public class JdbcArticuloRepository implements ArticuloRepository{
	
	private SimpleJdbcTemplate simpleJdbcTemplate;
	
	@Autowired
	public JdbcArticuloRepository(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}

	//@Override
	public Articulo buscaArticulo(String titulo) {
		Articulo articulo=new Articulo();
		String query="SELECT COD_ARTICULO, TITULO, DESCRIPCION " +
		             "FROM T_ARTICULO WHERE TITULO = ?";
		
		RowMapper<Articulo> mapper = new RowMapper<Articulo>() {
			public Articulo mapRow(ResultSet rs, int rowNum)
					throws SQLException {
				String codArticulo=rs.getString("COD_ARTICULO");
				String titulo=rs.getString("TITULO");
				String descrip=rs.getString("DESCRIPCION");
				Articulo articulo = Articulo.publicaArticulo(codArticulo, titulo, descrip);
				return articulo;
			}
		};
		try{
			articulo=this.simpleJdbcTemplate.queryForObject(query, mapper, titulo);
		}catch(EmptyResultDataAccessException e){
			return null;
		}
		return articulo;
	}

	//@Override
	public void publicaArticulo(Articulo articulo) {
		String query="INSERT INTO T_ARTICULO(COD_ARTICULO, TITULO, DESCRIPCION) " +
		             "VALUES(?,?,?)";
		this.simpleJdbcTemplate.update(query, articulo.getCodigo(),articulo.getTitulo(),articulo.getDetalle());
		
	}

	//@Override
	public String obtenerCodigoDisponible() {
		Long codDis = 0l;
		codDis=this.simpleJdbcTemplate.queryForLong("select count(1)+1 from T_ARTICULO");
		return codDis.toString();
	}

}
